package com.stephen.redisdemo.atomic;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * @author: stephen
 * @create: 2020-02-29 16:16
 * @description: 阻塞队列,add,remove,element方法
 *  这些方法都会抛出异常
 */
public class BlockQueueDemo1 {

    public static void main(String[] args) {
        // 声明阻塞队列时,要指明容量
        BlockingQueue<String> queue = new ArrayBlockingQueue<>(3);
        /**
         * add时,若队列已满,则会抛Queue full 异常
         *
         */
        System.out.println(queue.add("a")); // true
        System.out.println(queue.add("b")); // true
        System.out.println(queue.add("c")); // true
        // System.out.println(queue.add("d"));// java.lang.IllegalStateException: Queue full

        /**
         * element检查队列是否为空,返回队列的第一个元素
         * 若队列为空,则抛异常,NoSuchElementException
         */
        System.out.println(queue.element()); // a

        /**
         * remove,默认是出队列第一个元素,
         * 若队列为空,则会抛NoSuchElementException
         */
        System.out.println(queue.remove("d")); // a
        System.out.println(queue.remove()); // b
        System.out.println(queue.remove()); // c
        System.out.println(queue.remove()); // java.util.NoSuchElementException


    }

}
